/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Mail_Server;

import Mail_Client.Cabecera_Mensaje;
import Mail_Client.Estructura_Mensaje;
import Mail_Client.ListaMensajes;
import Mail_Client.MailClient;
import Mail_Client.Mensaje_Completo;
import Mail_Client.sms_cliente;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author toshiba
 */
public class MailServer {
    
   /**
     * Variable publica: list_clientes de tipo list
     */
    public List<MailClient> list_clientes;


     /**
     * Constructor de la clase
     */
    public MailServer(){
       list_clientes = new ArrayList<MailClient>();
    }

     /**
     * Variable publica: list_clientes de tipo list
     */

    public void add_client(MailClient smsc){
        list_clientes.add(smsc);
    }

     /**
     * metodo que realiza el envio de mensaje
      * 
     */
    public void post (Mensaje_Completo sms){
        Estructura_Mensaje essms = sms.Estructura_Mensaje;
        Cabecera_Mensaje cm=essms.Cabecera_Mensaje;
        String nom_distino=cm.Nombre_Destinatario;
        for(int i=0;i<list_clientes.size();i++){
            MailClient smc =list_clientes.get(i);
            sms_cliente cc=smc.sms_client;
            String cliente =cc.mombre;
            if (nom_distino.equals(cliente)){
                cc.agregar_sms(sms);
                break;
            } 
        }
   }
   /**
     * metodo que muestra la lista de cleintes conectados
     * @return nombre de clientes conectados
     */
   public List<String> clientes_conectados(){
       List<String> nombres=new ArrayList<String>();
       for(int i=0;i<list_clientes.size();i++){
           MailClient nom_objeto=list_clientes.get(i);
           String nom_cliente=nom_objeto.sms_client.mombre;
           nombres.add(nom_cliente);
           
       }
       return nombres;
   }

   /**
     * metodo publica que la lista los mensajes Leidos
    *  @param nombre
     * @return mensajes Leidos, y sino encuentra devuelve 0
     */

   public List<Mensaje_Completo> Get_sms_leidos(String name){
       List<Mensaje_Completo> mc= new ArrayList<Mensaje_Completo>();
       sms_cliente cliente= getNextMessage(name);
       ListaMensajes listMessage = cliente.lista_mensajes;
       for(int j=0;j<listMessage.longitud_sms();j++){
          Mensaje_Completo mmessage = listMessage.Get_Mensaje_completo(j);
           if (mmessage.Estado_Mensaje==true){
               mc.add(mmessage);
           }
       }
       if (mc.size()>0){
            return mc;
       }  
   return null;
   }

    /**
     * metodo publica que la lista los mensajes No Leidos
    *  @param nombre
     * @return mensajes Leidos, y sino encuentra devuelve 0
     */

   public List<Mensaje_Completo> Get_sms_no_leidos(String name){
       List<Mensaje_Completo> mc= new ArrayList<Mensaje_Completo>();
       sms_cliente cliente= getNextMessage(name);
       ListaMensajes listMessage = cliente.lista_mensajes;
       for(int j=0;j<listMessage.longitud_sms();j++){
          Mensaje_Completo mmessage = listMessage.Get_Mensaje_completo(j);
           if (mmessage.Estado_Mensaje==false){
               mc.add(mmessage);
           }
       }
       if (mc.size()>0){
            return mc;
       }  
   return null;
   }

    /**
     * metodo publica que la lista todos los mensajes
    *  @param nombre
     * @return todos los mensajes, y sino encuentra devuelve 0
     */

   public List<Mensaje_Completo> Get_todos_los_sms(String name){
       List<Mensaje_Completo> mc= new ArrayList<Mensaje_Completo>();
       sms_cliente cliente= getNextMessage(name);
       ListaMensajes listMessage = cliente.lista_mensajes;
       for(int j=0;j<listMessage.longitud_sms();j++){
           Mensaje_Completo mmessage = listMessage.Get_Mensaje_completo(j);
           mc.add(mmessage);
       }
       if (mc.size()>0){
            return mc;
       }  
   return null;
   }
   /**
     * metodo que muestra el siguiente mensaje
     * @param nombre
     * @return mensaje de clientes
     */
   public sms_cliente getNextMessage(String name){
       for(int i=0;i<list_clientes.size();i++){
           MailClient nom_objeto=list_clientes.get(i);
           String nom_cliente=nom_objeto.sms_client.mombre;
           if (nom_cliente.equals(name)){
                MailClient mc=list_clientes.get(i);
                return mc.sms_client; 
           } 
       }
       return null;
   }
   /**
     * metodo que muestra el siguiente mensaje de un cliente
     * @param nombre
     * @return mensaje
     */

    public Mensaje_Completo getNextMessageCliente(String nombre){
       sms_cliente cliente = getNextMessage(nombre);
       ListaMensajes listMessage = cliente.lista_mensajes;
       for(int j=0;j<listMessage.longitud_sms();j++){
           Mensaje_Completo mmessage = listMessage.Get_Mensaje_completo(j);
           if (mmessage.Estado_Mensaje==false){
               mmessage.Estado_Mensaje=true;
               return mmessage;
           }  
       }
       return null;
   }
  /*
   * metodo que obtiene la lsita de mensajes
   * @param name
   * @return la lista de mensajes de un cliente
   */
 public int getMessagesWaiting(String name){
       for(int i=0;i<list_clientes.size();i++){
           MailClient mss=list_clientes.get(i);
           sms_cliente smsc= mss.sms_client;
           String nom_cliente=smsc.mombre;
           if (nom_cliente.equals(name)){
               MailClient mc=list_clientes.get(i);
               sms_cliente sc=mc.sms_client;
               int size=sc.longitud_sms();
               return size ; 
           } 
       }
       return 0;
 }

}